From: Hellyna Ng Date: Mon, 28 Feb 2011 10:09:40 +0000 (+0800) Subject: MessageTray: never show summary and a new notification at the same time X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8515 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=5a86b0f9e350b8bf7f58f442b4fcc32671d37c8d;p=gnome-shell.git MessageTray: never show summary and a new notification at the same time We want to minimize focus stealing from the user. If a non-urgent notification comes in while the user is interacting with the tray, we add it to the tray and only show it after the user is done interacting with the tray. If an urgent notification comes in while the user is interacting with the tray, we hide the tray and show the urgent notification. https://bugzilla.gnome.org/show_bug.cgi?id=636838 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index ee7747401..a2810390c 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1691,14 +1691,15 @@ MessageTray.prototype = { // at the present time. _updateState: function() { // Notifications - let notificationsPending = this._notificationQueue.length > 0 && - (!this._busy || this._notificationQueue[0].urgency == Urgency.CRITICAL); + let notificationUrgent = this._notificationQueue.length > 0 && this._notificationQueue[0].urgency == Urgency.CRITICAL; + let notificationsPending = this._notificationQueue.length > 0 && (!this._busy || notificationUrgent); let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved; let notificationExpanded = this._notificationBin.y < 0; let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked) || this._notificationRemoved; + let canShowNotification = notificationsPending && this._summaryState == State.HIDDEN; if (this._notificationState == State.HIDDEN) { - if (notificationsPending) + if (canShowNotification) this._showNotification(); } else if (this._notificationState == State.SHOWN) { if (notificationExpired) @@ -1720,7 +1721,11 @@ MessageTray.prototype = { this._notificationState == State.SHOWN); let notificationsDone = !notificationsVisible && !notificationsPending; - if (this._summaryState == State.HIDDEN) { + let summaryOptionalInOverview = this._overviewVisible && !this._locked && !summaryHovered; + let mustHideSummary = (notificationsPending && (notificationUrgent || summaryOptionalInOverview)) + || notificationsVisible; + + if (this._summaryState == State.HIDDEN && !mustHideSummary) { if (this._backFromAway) { // Immediately set this to false, so that we don't schedule a timeout later this._backFromAway = false; @@ -1732,7 +1737,7 @@ MessageTray.prototype = { this._showSummary(0); } } else if (this._summaryState == State.SHOWN) { - if (!summaryPinned) + if (!summaryPinned || mustHideSummary) this._hideSummary(); else if (summaryVisibleWithNoHover && !summaryNotificationIsForExpandedSummaryItem) // If we are hiding the summary, we'll collapse the expanded summary item when we are done @@ -1761,7 +1766,7 @@ MessageTray.prototype = { if (haveClickedSummaryItem && !summarySourceIsMainNotificationSource && canShowSummaryBoxPointer && !requestedNotificationStackIsEmpty) this._showSummaryBoxPointer(); } else if (this._summaryBoxPointerState == State.SHOWN) { - if (!haveClickedSummaryItem || !canShowSummaryBoxPointer || wrongSummaryBoxPointer) + if (!haveClickedSummaryItem || !canShowSummaryBoxPointer || wrongSummaryBoxPointer || mustHideSummary) this._hideSummaryBoxPointer(); } @@ -2016,8 +2021,7 @@ MessageTray.prototype = { }, _hideSummaryCompleted: function() { - this._expandedSummaryItem = null; - this._expandedSummaryItemTitleWidth = this._summaryItemTitleWidth; + this._setExpandedSummaryItem(null); }, _showSummaryBoxPointer: function() {